﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SGArchiveSystem7xCommons
{
    /// <summary>
    /// 实体类通用
    /// </summary>
    public class SGEntity
    {
        /// <summary>
        /// 类型2 的属性 转到 类型1 里对应的属性
        /// </summary>
        /// <param name="obj1">目标对象</param>
        /// <param name="obj2">新的对象</param>
        /// <param name="sNoModifyPropertieName">不要修改的属性名</param>
        public static bool ModifyEntity(Object obj1, object obj2,string sNoModifyPropertieName)
        {
            try
            {
                #region 应该采用这类做法，通过反射技术来实现匹配属性更新
                ///获取要修改的实体类反射对象
                var Oldtype = obj1.GetType();
                ///获取要修该的实体类反射对象的所有属性
                var Oldps = Oldtype.GetProperties();
                ////获取新的实体类的反射对象
                var Newtype = obj2.GetType();
                ////获取新的实体类反射对象的所有属性
                var Newps = Newtype.GetProperties();

                foreach (var Oldp in Oldps)
                {
                    ////如果是ID字段，那么不修改
                    if (Oldp.Name == sNoModifyPropertieName)
                        continue;
                    foreach (var Newp in Newps)
                    {
                        if (Oldp.Name == Newp.Name)
                        {
                            ////当两个反射对象的属性名称一致时，将新的实体类的属性值赋给要修改的实体类的属性值
                            Oldp.SetValue(obj1, Newp.GetValue(obj2));
                            break;
                        }
                    }
                }
                #endregion
                return true;
            }
            catch(Exception ex) { return false; }
        }
    }
}
